Asset Configurations
UPS
SNMP Configurations
You can configure both IP & port of the snmpsim instance:
simengine-cli model create ups -k=3 --name=an-ups01 --host=192.168.124.3 --port=161
or
simengine-cli model update ups -k=3 --name=an-ups01 --host=localhost --port=1024
Note
Binding to 161
requires root
access.
Charge & Drain Speed Factors
simengine
supports speed-up for both battery recharge and drain.
simengine-cli configure-state ups -k2 --charge-speed=50
simengine-cli configure-state ups -k2 --drain-speed=50
This factor will be multiplied by the estimated drain/charge percentage per second.
Note
Running this command does not require simengine-core restart.
Runtime Graph
You can configure UPS runtime chart; For example, runtime.json
file will map 50 watts to 32 minutes, 100 to 18 min, 200 to 9 min etc.
runtime.json:
{
"50": 32,
"100": 18,
"200": 9,
"300": 5,
"400": 3,
"500": 2
}
Updating the model:
simengine-cli model update ups -k2 --runtime-graph "$(cat ./runtime.json)"
Power Capacity
Asset's power capacity can be updated as simengine-cli model update ups -k2 --power-capacity=1500
Full Recharge Time & Min Battery Level
Full recharge time can be configured as following:
simengine-cli model update ups -k2 --full-recharge-time=1 # set to 1 hour
The UPS will take 1 hour to recharge a fully depleted battery.
UPS also supports minimum battery level required (before UPS can power up its output outlets):
simengine-cli model update ups -k2 --min-power-bat=1 # 0.1% required before power is restored
Vendor Pre-Set
The simengine defaults its SNMP interface settings to APC hardware (outlined here ups). Custom vendor presets can be passed to the simengine-cli
system modelling tool with the --snmp-preset=/path/to/my_specs.json
option.
You can find APC examples of .json config files in simengine repo:
General Configurations (snmp-preset file description)
JSON property | Description |
---|---|
staticOidFile | .snmprec file containing recorded OID tree (see snmpsim doc reference). The simengine will search for the specified file at SIMENGINE_STATIC_DATA path |
assetName | Name displayed on the UI (can be overwritten with --name option) |
numOutlets | Number of UPS output outlets |
fullRechargeTime | (hours) Recharge time for a fully depleted battery |
minPowerOnBatteryLevel | Minimum value of the battery charge before UPS powers up its output |
outputPowerCapacity | (Watts) UPS output power capacity |
modelRuntime | Runtime graph consisting of key-value pairs { wattage: expected runtime in minutes } More values should yield more accurate results |
OID Specifications
OID JSON structure:
"OIDName": {
"OID": "1.3.6....", // Vendor-specific OID
"dataType": 2, // DataType (e.g. 2-iteger, 67-Timeticks, 66-Gauge etc.)
"defaultValue": 1, // Value set on engine start
"oidDesc": { // Value to enum mappings
"1": "switchOn",
"2": "switchOff"
}
}
JSON Property (OID Name) | Description | Value Mappings |
---|---|---|
SerialNumber | Asset serial number | |
HighPrecBatteryCapacity | High-precision battery capacity (max 1000) | |
AdvBatteryCapacity | Advance battery capacity (max 100%) | |
BasicBatteryStatus | Basic status of the UPS battery | batteryNormal, batteryLow |
HighPrecOutputLoad | High-precision load percentage of the total capacity (outputPowerCapacity) | |
AdvOutputLoad | load percentage of the total capacity (outputPowerCapacity) | |
HighPrecOutputCurrent | Current UPS load in AMPs (high-precision) | |
AdvOutputCurrent | Current UPS load in AMPs | |
BatteryRunTimeRemaining | Run-time left before UPS shuts down | |
TimeOnBattery | How long UPS has been running on a battery | |
PowerOff | Power off UPS device | switchOff,switchOffGraceful |
BasicOutputStatus | Battery status: online, on-battery, offline | onLine, onBattery, off |
InputLineFailCause | Reason behind transferring to the alt. battery power source | noTransfer, blackout, deepMomentarySag |
AdvConfigReturnDelay | Power up delay | |
AdvConfigShutoffDelay | Shut down delay |
Server Type
SimEngine supports 2 types of servers: server
and server-bmc
. Asset of type server
is a simpler variation of server-bmc
that manages a VM but does not support IPMI/BMC
or storcli64
interfaces. Both server types allow up to 2 PSUs at the moment and require power consumption and valid VM domain name specified (--domain-name={my_vm}
argument).
BMC Server
Server with IPMI_SIM interface (server-bmc
) requires specific .xml
configurations for qemu VM and some manual VM setup for storcli64
. You can edit libvirt
config file by issuing this command:
virsh edit {domain name}
You will need to change the top-level tag to <domain type='kvm' xmlns:qemu='http://libvirt.org/schemas/domain/qemu/1.0'>
and also add qemu
command line arguments (after </devices>
).
For instance, this CLI-defined server model:
simengine-cli model create server-bmc --asset-key=8 \
--domain-name=an-a01n02 \
--power-consumption=360 \
--port=9101 \
--vmport=9102 \
--storcli-port=50001
Will require the following .xml configurations:
<qemu:commandline>
<qemu:arg value='-chardev'/>
<qemu:arg value='socket,id=ipmi0,host=localhost,port=9102,reconnect=10'/>
<qemu:arg value='-device'/>
<qemu:arg value='ipmi-bmc-extern,id=bmc0,chardev=ipmi0'/>
<qemu:arg value='-device'/>
<qemu:arg value='isa-ipmi-bt,bmc=bmc0'/>
<qemu:arg value='-serial'/>
<qemu:arg value='mon:tcp::9012,server,telnet,nowait'/>
<qemu:arg value='-chardev'/>
<qemu:arg value='socket,id=simengine-storage-tcp,host=localhost,port=50001,reconnect=2'/>
<qemu:arg value='-device'/>
<qemu:arg value='virtio-serial'/>
<qemu:arg value='-device'/>
<qemu:arg value='virtserialport,chardev=simengine-storage-tcp,name=systems.cdot.simengine.storage.net'/>
</qemu:commandline>
Storage emulation features require storcli64
executable to be uploaded to the managed vm bin directory.
The binary can be found in simengine repo: link
Here is a breakdown of server-bmc
command line parameters and some corresponding .xml configurations:
IPMI Interface
Argument | Description |
---|---|
port |
IPMI/BMC interface port (used on the host machine): ipmitool -H localhost -p {port} -U {user} |
user |
admin user: ipmitool -H localhost -p {port} -U {user} |
password |
admin user password |
VM Configurations
Argument | Description |
---|---|
vmport |
Simengine will use this port internally to connect to the VM, this value needs to be configured in libvirt .xml definition as: <qemu:arg value='socket,id=ipmi0,host=localhost,port={vmport},reconnect=10'/> |
storcli-port |
storcli64 binary will connect to this StorCLI websocket server port on guest OS. The port value needs to be configured in libvirt .xml definition as: <qemu:arg value='socket,id=simengine-storage-tcp,host=localhost,port=50001,reconnect=2'/> |
Sensor Model
SimEngine defaults its IPMI/BMC sensor definitions to the following model. Custom configurations can be passed to the cli
system modelling tool with the --sensor-def=/path/to/my_specs.json
option.
Engine supports a limited number of sensor types and each sensor definition must provide defaultValue
, offValue
and name
as well as address
if addressSpace
is not provided. You can also specify any number of thresholds (or none).
"caseFan": {
"group": "fan",
"addressSpace": "0x6f",
"sensorDefinitions": [
{
"thresholds": {
"lnr": 0, // Lower Non-Recoverable
"lcr": 200, // Lower Critical
"lnc": 300, // Lower Non-Critical
"unc": 1000, // Upper Non-Critical
"ucr": 1200, // Upper Critical
"unr": 1500, // Upper Non-Recoverable
},
"defaultValue": 0,
"offValue": 0,
"name": "Frnt_FAN{index}"
}
]
}
Storage Model
SimEngine uses the following storage topology: storage.json. Custom configurations can be passed to the cli
system modelling tool with the --storage-def=/path/to/my_specs.json
option. You can specify any number of controllers and each controller can include definitions of cache vault (CacheVault
), virtual and physical drives (VD
& PD
).
{
// ..storcli64 details
"controllers": [
{
// ..controller 0 details
"CacheVault": { ... },
"VD": [
{
// ..virtual drive 0 details
// IDs of the physical drives belonging to the virtual drive
"DID": [9, 10, 8]
}, { ... }
],
"PD": [
{ ... },
{ ... }
]
}, { ... }
]
}
Storage States
Storage states file defines how the storage emulator will behave depending on current system states. For example, virtual drive will be set to partially degraded state — Pdgd
when one of the physical drives is either offline or rebuilding:
{
"virtualDrive": {
"Optl": { ... }
"Pdgd": {
"numPdOffline": 1, // set VD state to Pdgd if true
"numPdRebuilding": 1, // set VD state to Pdgd if true
"mediaErrorCount": -1,
"otherErrorCount": -1,
"predictiveErrorCount": -1
},
"Dgrd": { ... }
},
"controller": { ... }
}
Custom spec file can be passed to the cli
system modelling tool with the --storage-states=/path/to/my_specs.json
parameter.